home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / adasmall / newrace.ada < prev    next >
Text File  |  1996-01-30  |  3KB  |  105 lines

  1. with SMALL_SP; use SMALL_SP;  -- CS159-10 Instructor: Arthur Vargas Lopes
  2.                               -- Fall 1990
  3. procedure race is
  4. task SCREEN is
  5.         entry WAITME;
  6.         ENTRY SIGNALME;
  7. end SCREEN;
  8. task BUBBLE_SORT is
  9. end BUBBLE_SORT;
  10. task SELECT_S_SORT is
  11. end SELECT_S_SORT;
  12. task body SCREEN is
  13.   n : integer;
  14. begin
  15.   n := 0;
  16.   loop
  17.      select
  18.        when n = 0 =>
  19.           accept WAITME do
  20.             n := 1;
  21.           end WAITME;
  22.      or
  23.        when n = 1 =>
  24.           accept SIGNALME do
  25.             n := n - 1;
  26.           end SIGNALME;
  27.      or
  28.         terminate;
  29.      end select;
  30.    end loop;
  31. end SCREEN;
  32. task body SELECT_S_SORT is
  33.     B : STRING(0..25);
  34.     I,J : INTEGER;
  35.     procedure SWAP(X, Y : in INTEGER) is
  36.         temp : character;
  37.     begin
  38.                                         SCREEN.WAITME; CURSORAT(2,X+14);
  39.                                         PUT("X"); CURSORAT(2,Y+14);
  40.                                         PUT("Y");
  41.                                         SCREEN.SIGNALME;
  42.         temp := b(x);
  43.         b(x) := b(y);
  44.         b(y) := temp;                   SCREEN.WAITME; CURSORAT(3,X+14);
  45.                                         PUT(b(x)); CURSORAT(3,Y+14);
  46.                                         PUT(b(y));
  47.                                         CURSORAT(2,X+14); PUT(" ");
  48.                                         CURSORAT(2,Y+14); PUT(" ");
  49.                                         SCREEN.SIGNALME;
  50.     end SWAP;
  51.  begin
  52.        SCREEN.WAITME;CURSORAT(3,1); PUT("Selection:");SCREEN.SIGNALME;
  53.        B := "ZYXWVUTSRQPONMLKJIHGFEDCBA";
  54.        for k in 0..25 loop
  55.            CURSORAT(3,k+14);
  56.            put(b(k));
  57.        end loop;
  58.        for i in 0..24 loop       SCREEN.WAITME; CURSORAT(2,50);
  59.                                  PUT("I: "); PUT(I);  SCREEN.SIGNALME;
  60.          for j in (i+1)..25 loop    SCREEN.WAITME; CURSORAT(3,50);
  61.                                     PUT("J: "); PUT(J);  SCREEN.SIGNALME;
  62.            if B(I) > B(J) then
  63.              SWAP(I,J);
  64.            end if;
  65.          end loop;
  66.        end loop;
  67. end SELECT_S_SORT;
  68.  
  69. task body BUBBLE_SORT is
  70.     B : STRING(0..25);
  71.     I,J : INTEGER;
  72.     procedure SWAP(X, Y : in INTEGER) is
  73.         temp : character;
  74.     begin
  75.         SCREEN.WAITME; CURSORAT(6,X+14); PUT("X"); CURSORAT(6,Y+14);
  76.         PUT("Y"); SCREEN.SIGNALME;
  77.         temp := b(x);
  78.         b(x) := b(y);
  79.         b(y) := temp;
  80.         SCREEN.WAITME; CURSORAT(7,X+14); PUT(b(x)); CURSORAT(7,Y+14);
  81.         PUT(b(y)); CURSORAT(6,X+14);
  82.         PUT(" "); CURSORAT(6,Y+14); PUT(" "); SCREEN.SIGNALME;
  83.     end SWAP;
  84. begin
  85.        SCREEN.WAITME;CURSORAT(7,1); PUT("Bubble:"); SCREEN.SIGNALME;
  86.        B := "ZYXWVUTSRQPONMLKJIHGFEDCBA";
  87.        for k in 0..25 loop
  88.            SCREEN.WAITME;CURSORAT(7,k+14);
  89.            put(b(k));    SCREEN.SIGNALME;
  90.        end loop;
  91.        I:= 25;
  92.        while (I > 0) loop                CURSORAT(6,50); PUT("I: "); PUT(I);
  93.          J:= 0;
  94.          while (J < I) loop              CURSORAT(7,50); PUT("J: "); PUT(J);
  95.            if B(J) > B(J+1) then
  96.              SWAP(J,J+1);
  97.            end if;
  98.            J:= J+1;
  99.          end loop;
  100.          I:= I-1;
  101.        end loop;
  102. end BUBBLE_SORT;
  103. begin
  104. end race;
  105.